module portOut (
    input wire clk,
    input wire rst,
    input wire date_en,
    input wire [31:0] data_in,
    output reg port_idle,
    output reg sop,
    output reg eop,
    output reg [31:0] data_out
);

    reg [31:0] memory [0:511];
    integer i;
    integer file_descriptor;  // 文件描述符
    integer num = 1;// 文件名

    always @(posedge clk) begin
        if (rst) begin
            i = 0;
        end
        else begin
            if (date_en) begin
                data_out <= data_in;
                memory[i] <= data_in;
                i <= i + 1;
            end

            if (date_en == 0 && i > 0) begin  // 只有在数据有效且有数据存储时操作
                // 生成文件名"data_packet_<num>.bin"
                string file_name;
                $sformat(file_name, "data_packet_%0d.bin", num);
                num++;
                file_descriptor = $fopen(file_name, "w");  // 打开新文件

                if (file_descriptor == 0) begin
                    $display("Failed to open file.");
                    $finish;
                end

                for (integer j = 0; j < i; j = j + 1) begin  // 写入 memory 中的数据
                    $fwrite(file_descriptor, "%h\n", memory[j]);
                end

                $fclose(file_descriptor);  // 关闭文件
                i = 0;  // 重置计数器
            end
        end
    end
endmodule